package biblioteca.mb;

import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import biblioteca.ejb.fachada.PBiblioFachadaRemote;
import biblioteca.entities.Livro;
import biblioteca.entities.Usuario;

@SessionScoped
@ManagedBean(name="usuarioMB")
public class UsuarioMB {
	private String login;
	private String senha;
	private String mensagem = "";
	private Usuario usuario = null;
	private List<Usuario> usuarios;
	// Para exibir a lista de livros
	private List<Livro> livros;
	// Para cadastrar um novo livro
	private String novoTitulo;
	private String novoAutor;
	private String novaEditora;
	private int novoAnoPublicacao;
	private float novaNota;
	// Para alterar um livro existente
	private Livro aAlterar = new Livro();
	// Para identificar o livro a ser removido
	private int idRemover;

	
	@EJB
	PBiblioFachadaRemote fachada;
	
	public UsuarioMB() {
		super();
	}

	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getMensagem() {
		return mensagem;
	}
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public String autenticar() {
		this.usuario = fachada.autenticaUsuario(login, senha);
		if (this.usuario != null) {
			this.setMensagem("");
			return "autenticado";
		}
		this.setMensagem("Login e senha não correspondem a um usuário válido!");
		return "falhaAutenticacao";
	}
	
	public String logout() {
		this.setUsuario(null);
		try {
			this.finalize();
		} catch (Throwable e) {
			System.err.println(e.getMessage());
		}
		return "logout";
	}
	
	public boolean getNotLogado() {
		if (this.usuario == null) {
			return true;
		}
		return false;
	}

	public List<Livro> getLivros() {
		if (this.usuario != null) {
			this.setLivros(fachada.getLivros(this.usuario.getId()));
		}
		return livros;
	}
	public List<Usuario> getUsuarios(){
		if (this.usuario!=null){
			this.usuarios=fachada.getUsuarios(this.usuario.getId());
		}
		return this.usuarios;
	}
	
	public String showUsuarios(){
		return "listausuarios";
	}
	
	public void setLivros(List<Livro> livros) {
		this.livros = livros;
	}

	public String getNovoTitulo() {
		return novoTitulo;
	}
	public void setNovoTitulo(String novoTitulo) {
		this.novoTitulo = novoTitulo;
	}
	
	public String getNovoAutor() {
		return novoAutor;
	}
	public void setNovoAutor(String novoAutor) {
		this.novoAutor = novoAutor;
	}
	
	public String getNovaEditora() {
		return novaEditora;
	}
	public void setNovaEditora(String novaEditora) {
		this.novaEditora = novaEditora;
	}
	
	public int getNovoAnoPublicacao() {
		return novoAnoPublicacao;
	}
	public void setNovoAnoPublicacao(int novoAnoPublicacao) {
		this.novoAnoPublicacao = novoAnoPublicacao;
	}
	
	public float getNovaNota() {
		return novaNota;
	}
	public void setNovaNota(float novaNota) {
		this.novaNota = novaNota;
	}
	
	public int getIdRemover() {
		return idRemover;
	}
	public void setIdRemover(int idRemover) {
		this.idRemover = idRemover;
	}

	public Livro getaAlterar() {
		return aAlterar;
	}
	public void setaAlterar(Livro aAlterar) {
		this.aAlterar = aAlterar;
	}
	
	public String cadastrarLivro() {
		Livro novo = new Livro();
		novo.setTitulo(novoTitulo);
		novo.setAutor(novoAutor);
		novo.setEditora(novaEditora);
		novo.setAnoPublicacao(novoAnoPublicacao);
		novo.setNota(novaNota);
		
		if (fachada.cadastraLivro(this.usuario.getId(), novo)) {
			this.novoTitulo = "";
			this.novoAutor = "";
			this.novaEditora = "";
			this.novoAnoPublicacao = 0;
			this.novaNota = 0;
			return "ok";
		}
		return "erro";
	}
	
	public String setAlterado() {
		int id = aAlterar.getId();
		aAlterar = fachada.getLivro(id);
		return "alterarLivro";
	}
	
	public String alterarLivro() {
		fachada.alterarLivro(this.aAlterar);
		return "ok";
	}
	
	public String removerLivro() {
		fachada.removerLivro(this.usuario.getId(), this.idRemover);
		return "ok";
	}
	
	
}
